home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir42 / dbinde.zip / DBINDENT.PRG < prev    next >
Text File  |  1993-10-10  |  7KB  |  242 lines

  1. * -> PROGRAM NAME     DBINDENT.PRG
  2. * -> PURPOSE          INDENT CERTAIN COMMANDS FOR READABILITY, DEBUGGING, ETC
  3. * -> WRITTEN BY       R. S. (BOB) VAN GORDER, COMPUSERVE ID 73230, 2136
  4. * -> FILES USED       DBINDENT.PRG (THIS PROGRAM), DBINDENT.DBF
  5. *
  6. * THE FILE DBINDENT.DBF CONSISTS OF ONE FIELD NAMED 'ENT'.  ENT IS A CHARACTER
  7. * TYPE FIELD WHICH MAY BE SET TO WHATEVER LENGTH YOU FEEL APPROPRIATE; KEEPING
  8. * UNIDENTED LINES TO 78 CHARACTERS OR LESS AND USING A FIELD LENGTH OF 120 TO
  9. * ALLOW FOR DEEPLY INDENTED SITUATIONS SEEMS TO WORK QUITE WELL
  10. *
  11. * BEFORE USING THIS PROGRAM, 'APPEND' THE TEXT TO BE INDENTED INTO
  12. * DBINDENT WITH THE COMMAND
  13. *
  14. *           APPEND FROM [PATH] [FILENAME + EXTENSION] SDF
  15. *
  16. * THE 'SDF' FILE TYPE MUST BE USED TO READ IN ASCII FILES (.PRG FILES CREATED
  17. * WITH THE NATIVE DBASE EDITOR AND MOST LINE EDITORS ARE ASCII FILES)
  18. *
  19. * AFTER RUNNING THE PROGRAM, WRITE THE INDENTED FILE TEXT WITH THE COMAND
  20. *
  21. *          COPY TO [PATH] [FILENAME + EXTENSTION] DELI WITH BLANK
  22. *
  23. * 'DELI WITH BLANK' IS NECESSARY TO WRITE THE INDENTED FILE AS AN ASCII FILE
  24. *
  25. * -> INITIALIZE ENVIRONMENT
  26. SET STEP OFF
  27. SET ECHO OFF
  28. SET TALK OFF
  29. SET COLOR TO W+/B
  30. CLEA
  31. SET DEVI TO SCREEN
  32. SET FILT TO
  33. SET DELE ON
  34. SET EXAC OFF
  35. *
  36. * -> ESTABLISH / INITIALIZE VALUES
  37. *
  38. * -> ESTABLISH A STRING WORKING VALUE AND
  39. WV = ''
  40. * -> A 'KEYWORD' SEARCH STRING
  41. KS = ''
  42. * -> CREATE A NUMERIC INDENTATION / SPACING VALUE
  43. INDEN = 0
  44. * -> SET UP A LONG LINE (STATEMENT CONTINUATION) INDICATOR,
  45. CON = .F.
  46. * -> A PROCEDURE (SUBROUTINE/SUBPROGRAM) INDICATOR,
  47. PON = .F.
  48. * -> TEXT...ENDTEXT INDICATOR, AND
  49. TON = .F.
  50. * -> A 'TEMPORARY UN-INDENT' INDICATOR (ELSE, OTHERWISE, CASE, PARAMETERS, ETC)
  51. UNINDE = .F.
  52. *
  53. * -> BEGIN PROCEDURE OPERATIONS
  54. *
  55. USE DBINDENT
  56. DO WHILE .NOT. EOF()
  57. *
  58. * -> GET A WORKING VALUE FOR THE ENTRY / LINE
  59. *
  60. WV = UPPER(LTRIM(RTRIM(ENT))) + ' '
  61. *
  62. * -> REMOVE ANY COMMAND LINE COMMENTS
  63. * -> IF YOU WISH TO RETAIN COMMAND LINE COMMENTS, REPLACE 'WV' IN REPLACE
  64. *    COMMANDS IN THIS PROGRAM WITH 'UPPER(LTRIM(RTRIM(ENT)))'
  65. *
  66. IF ("&"+"&") $ WV
  67.   WV = RTRIM(LEFT(WV, AT(("&"+"&"),WV))) + ' '
  68. ENDIF
  69. *
  70. * -> EXTRACT THE LEFTMOST COMMAND WORD FOR 'KEYWORD' SEARCHES
  71. *
  72. KS = LEFT(WV, AT(' ', WV))
  73. *
  74. * -> CHECK FOR TEXT...ENDTEXT SITUATIONS
  75. *
  76. IF TON .AND. (KS = 'ENDT ' .OR. KS = 'ENDTEXT ')
  77.   TON = .F.
  78.   REPL ENT WITH 'ENDTEXT'
  79.   SKIP
  80.   LOOP
  81. ENDIF
  82. IF .NOT. TON .AND. KS = 'TEXT '
  83.   TON = .T.
  84.   REPL ENT WITH 'TEXT'
  85. ENDIF
  86. IF TON
  87.   SKIP
  88.   LOOP
  89. ENDIF
  90. *
  91. * -> DELETE EMPTY LINES OUTSIDE TEXT...ENDTEXT SITUATIONS
  92. *
  93. IF LEN(KS) = 1
  94.   DELE
  95.   SKIP
  96.   LOOP
  97. ENDIF
  98. *
  99. * -> CHECK FOR 'TEMPORARY UNINDENTS'
  100. *
  101. IF KS = 'CASE '
  102.   INDEN = INDEN - 2
  103.   UNINDE = .T.
  104. ENDIF
  105. IF KS  = 'OTHERWISE ' .OR. KS  = 'OTHE '
  106.   INDEN = INDEN - 2
  107.   UNINDE = .T.
  108. ENDIF
  109. IF KS = 'ELSE '
  110.   INDEN = INDEN - 2
  111.   UNINDE = .T.
  112. ENDIF
  113. IF PON .AND. (KS = 'PARAMETERS ' .OR. KS = 'PARA ')
  114.   INDEN = INDEN - 2
  115.   UNINDE = .T.
  116. ENDIF
  117. *
  118. * -> CHECK FOR ENDINGS OF INDENT SITUATIONS
  119. *
  120. IF KS = 'ENDCASE ' .OR. KS = 'ENDC '
  121.   INDEN = INDEN - 4
  122. ENDIF
  123. IF KS = 'ENDDO ' .OR. KS = 'ENDD '
  124.   INDEN = INDEN - 2
  125. ENDIF
  126. IF KS = 'ENDIF ' .OR. KS = 'ENDI '
  127.   INDEN = INDEN - 2
  128. ENDIF
  129. *
  130. * -> YOU MAY WISH TO DELETE THIS SECTION AND ARBITRARILY SET THE INDENTATION
  131. *    VALUE TO 0 AT THE START OF A PROCEDURE (SUBROUTINE) IN THE DE-INDENTING
  132. *    'IF PON' LINE FURTHER ON, ESPECIALLY IF YOU USE 'RETURN' IN CONDITION
  133. *    CHECKS WITHIN SUBROUTINES; AVOIDING SUCH USE OF RETURN COMMANDS ANYPLACE
  134. *    OTHER THAN AT THE END OF SUBPROGRAMS CAN BE ACCOMPLISHED THROUGH THE USE
  135. *    OF DO...ENDDO LOOPS AND USING EXIT VERSUS RETURN WHEN CHECKING FOR ANY
  136. *    TERMINATING (RETURN) CONDITIONS
  137. *
  138. IF PON .AND. (KS = 'RETURN ' .OR. KS = 'RETU ')
  139.   INDEN = INDEN - 2
  140.   PON = .F.
  141. ENDIF
  142. *
  143. * -> INSURE INDENY VALUE IS >= 0 (MIGHT BE < 0 FOR UNBALANCED IF...ENDIF, ETC)
  144. *
  145. IF INDEN < 0
  146.   INDEN = 0
  147. ENDIF
  148. *
  149. * -> REPLACE ENTRY WITH INDENTED LINE
  150. *
  151. REPL ENT WITH SPACE(INDEN) + WV
  152. *
  153. * -> REVERSE 'TEMPORARY UNIDENT' SITUATIONS AFTER WRITING THE INDENTED LINE
  154. *
  155. IF UNINDE
  156.   INDEN = INDEN + 2
  157.   UNINDE = .F.
  158. ENDIF
  159. *
  160. * -> MAKE ADJUSTMENTS FOR SPECIAL SITUATIONS
  161. *
  162. * -> COMMENT LINES - SELECT AN IF STATEMENT BELOW OR DELETE THIS SECTION
  163. * -> THE FIRST IF STATEMENT MOVES ALL COMMENT LINES TO THE LEFT MARGIN WHILE
  164. *    THE SECOND LEAVE COMMENT LINES INDENTED EXCEPT WHEN SERVING AS A
  165. *    'SEPARATOR LINE'
  166. *
  167. *  IF LEFT(KS, 1) = '*'
  168. IF LEN(LTRIM(RTRIM(ENT))) = 1 .AND. LTRIM(RTRIM(ENT)) = '*'
  169.   REPL ENT WITH WV
  170. ENDIF
  171. *
  172. * -> IF YOU SO DESIRE, DELETE ALL COMMENT LINES WITH THIS SECTION
  173. *
  174. *  IF LEFT(KS,1) = '*'
  175. *    DELE
  176. *  ENDIF
  177. *
  178. * -> OR REMOVE SEPARATOR LINES ONLY WITH THE FOLLOWING COMMANDS
  179. *
  180. *  IF LEN(LTRIM(RTRIM(ENT))) = 1 .AND. '*' $ ENT
  181. *    DELE
  182. *  ENDIF
  183. *
  184. * -> MOVE @ SAY...GET STATEMENTS TO THE LEFT MARGIN
  185. * -> YOU MAY WISH TO REMOVE THIS SECTION FOR IMPROVED READABILITY; IN SOME
  186. *    CASES, THOUGH, THIS MEY MAKE THE @ SAY...GET LINE MAY EXTEND BEYOND THE
  187. *    RIGHT SIDE OF YOUR EDITING SCREEN AND MAKE ERRORS HARDER TO FIND.
  188. *    (BY USING ENT RATHER THAN KS IN THE REPL LINE, UPPER/LOWER CASE IS
  189. *    RETAINED FOR READABILITY; THIS CAN BE EXPECIALLY DESIRABLE IF YOU
  190. *    WRITE YOUR OWN INPUT SCREENS)
  191. *
  192. IF KS = '@'
  193.   REPL ENT WITH LTRIM(ENT)
  194.   SKIP
  195.   LOOP
  196. ENDIF
  197. *
  198. * -> CONTINUATION LINES
  199. *
  200. * -> YOU MAY ALSO WISH TO OMIT THIS SECTION FOR READABILITY.  BE AWARE,
  201. *    HOWEVER, THAT IN SOME SITUATIONS IT MAY RESULT IN AN OVERLY LONG
  202. *    LINE (MORE THAN 254 CHARACTERS IN LENGTH) WHICH CAN BE TRUNCATED
  203. *    BY DBASE RESULTING IN AN ERROR CONDITION OR AN INCOMPLETE BUT
  204. *    SYNTACTICALLY VALID LINE
  205. *
  206. IF CON
  207.   REPL ENT WITH ' ' + LTRIM(RTRIM(WV))
  208. ENDIF
  209. *
  210. * -> CHECK FOR THE START OR TERMINATION OF CONTINUATION LINE SITUATIONS AFTER
  211. *    ADJUSTING INDENTING (SO THE FIRST LINE WILL BE PROPERLY INDENTED IN
  212. *    RELATION TO PRECEDING LINES)
  213. *
  214. CON = (RIGHT(RTRIM(WV), 1) = ';')
  215. *
  216. * -> NOW CHECK FOR POSSIBLE BEGINNINGS OF OTHER INDENTATION SITUATIONS
  217. *
  218. IF KS = 'DO CASE '
  219.   INDEN = INDEN + 4
  220. ENDIF
  221. IF .NOT. PON .AND. (KS = 'PROCEDURE ' .OR. KS = 'PROC ')
  222.   INDEN = INDEN + 2
  223.   PON = .T.
  224. ENDIF
  225. IF KS = 'DO WHILE ' .OR. KS = 'DO WHIL '
  226.   INDEN = INDEN + 2
  227. ENDIF
  228. IF KS = 'IF '
  229.   INDEN = INDEN + 2
  230. ENDIF
  231. SKIP
  232. ENDDO
  233. SET ECHO ON
  234. SET TALK ON
  235. SET DELE ON
  236. * -> HERE'S A LITTLE TRICK I FOUND TO CLEAR THE SCREEN UPON RETURNING FROM A
  237. *    PROGRAM TO THE DBASE PROMPT; AT THE END OF THE PROGRAM, SWITCH THE
  238. *    STATUS LINE OFF AND BACK ON AGAIN (THE PROGRAM WILL DEFAULT BACK TO THE
  239. *    DBASE PROMPT WHEN THERE ARE NO MORE LINES IN THE PROGRAM)
  240. SET STAT OFF
  241. SET STAT ON
  242.